﻿#pragma once
#include <string>
#include "EagleDefine.h"

using namespace std;


#define TIME_PLUGIN_INTERFACE_VERSION	1

typedef struct TagTimeDllGetTimeStruct{
	int				column;			// 列分辨率
	int				line;			// 行分辨率
	int				color_depth;	// 记录色深
	unsigned char*	buffer;			// 存放时间信息的内存缓冲区
	bool			buffer_decoded;	// 表示上面缓冲区数据是否被解压缩
	unsigned int	data_source;	// 数据源个数，例如两个光纤一路光纤
	unsigned long	hour;			// 小时
	unsigned long	minite;			// 分
	unsigned long	second;			// 秒
	unsigned long	millsecond;		// 毫秒
	unsigned long	read_offset;	// 读取便宜量， 表示要读取的内存在这一帧数据的便宜地址
	unsigned long	length;			// 读取长度，以512字节对齐
	unsigned long	valid_data_offset;	// 时间有效数据在读取数据中的起始地址
}TimeDllGetTimeStruct;

extern "C"
{
	//DLL入口函数，返回当前接口版本的IPlugin接口对象实例
#define TIME_PLUGIN_ENTRY_NAME "GetTimerPlugin"
	EXPORT_API void* GetTimerPlugin(int version);
	typedef void* (*PluginProc)(int version);
}

class TimerPlugin
{
public:
	TimerPlugin() {}
	virtual ~TimerPlugin() {}
	virtual bool Inited() = 0;
	virtual void Close() = 0;

	/*
	**根据读取到的帧信息根据其不同的时间格式来解码返回获取到的真实时间
	**该接口必须继承
	**该接口调用必须依赖于GetTimeOffsetAndLength返回回来的参数。
	*/
	virtual int GetTime(TimeDllGetTimeStruct* time_struct) = 0;

	/*
	**根据行列和色深这些参数来获取时间编码信息在一帧数据内的以512字节为单位的起始地址和有效数据长度等信息
	*/
	virtual int GetTimeOffsetAndLength(TimeDllGetTimeStruct* offset_struct) = 0;

	virtual const wchar_t* Name() = 0;
	virtual const wchar_t* ErrorInfo() = 0;

protected:
	wstring	_name;
	wstring _err;
};